#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/6/18 21:41
# @USER    : Shengji He
# @File    : RotateImage.py
# @Software: PyCharm
# @Version  : Python-
# @TASK:
from typing import List


class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        You are given an n x n 2D matrix representing an image.

        Rotate the image by 90 degrees (clockwise).

        Note:

        You have to rotate the image in-place, which means you have to modify the input 2D matrix directly.
        DO NOT allocate another 2D matrix and do the rotation.

        Example 1:
            Given input matrix =
            [               \n
              [1,2,3],      \n
              [4,5,6],      \n
              [7,8,9]       \n
            ],

            rotate the input matrix in-place such that it becomes:
            [               \n
              [7,4,1],      \n
              [8,5,2],      \n
              [9,6,3]       \n
            ]
        Example 2:
            Given input matrix =
            [                   \n
              [ 5, 1, 9,11],    \n
              [ 2, 4, 8,10],    \n
              [13, 3, 6, 7],    \n
              [15,14,12,16]     \n
            ],

            rotate the input matrix in-place such that it becomes:
            [                   \n
              [15,13, 2, 5],    \n
              [14, 3, 4, 1],    \n
              [12, 6, 8, 9],    \n
              [16, 7,10,11]     \n
            ]

        Do not return anything, modify matrix in-place instead.
        :param matrix:
        """
        n = len(matrix)
        for i in range(n - 1):
            for j in range(i + 1, n):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
            matrix[i].reverse()
        matrix[n - 1].reverse()

        # matrix[:] = map(list,zip(*matrix[::-1]))


if __name__ == '__main__':
    S = Solution()
    matrix = [[5, 1, 9, 11], [2, 4, 8, 10], [13, 3, 6, 7], [15, 14, 12, 16]]
    # matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    S.rotate(matrix)
    print(matrix)
    print('done')
